/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package imperio.xmlReader;

import imperio.eventos.Morte;
import imperio.eventos.Mutacao;
import imperio.eventos.Reproducao;
import imperio.simulador.Simulador;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 *
 * @author Bernardo
 */
public class ReaderXmlFile {
    
    private static ReaderXmlFile readerXML;
    private int i,j;

    public static ReaderXmlFile getInstance(){
        if(readerXML == null)
            readerXML = new ReaderXmlFile();
         return readerXML;
    }

    private ReaderXmlFile() {
    }
    
    /**Método para o leitura do arquivo xml.
      
     */
    
    public void readXml(){
    try {
 
	SAXParserFactory factory = SAXParserFactory.newInstance();
	SAXParser saxParser = factory.newSAXParser();
 
	DefaultHandler handler = new DefaultHandler() {
 
	boolean plansys  = false;	
 
                @Override
	public void startElement(String uri, String localName,String tag, 
                Attributes attributes) throws SAXException {
 
                           
                if(tag.equalsIgnoreCase("simulation")){
                    Simulador.tempoSimulacao = Integer.parseInt(attributes.getValue(0));
                    Simulador.consObservacao = (double)Simulador.tempoSimulacao/20;                              
                    Simulador.popInicial = Integer.parseInt(attributes.getValue(1));                  
                    Simulador.maxPop = Integer.parseInt(attributes.getValue(2));                    
                } 
		if (tag.equalsIgnoreCase("empire")) {
                    Simulador.numPatrulhas = Integer.parseInt(attributes.getValue(0));                   
                    Simulador.numSistemas = Integer.parseInt(attributes.getValue(1));                  
                    Simulador.Matriz = new int[Simulador.numPatrulhas][Simulador.numSistemas];
		}
                
		if (tag.equalsIgnoreCase("patrol")) {
			i = Integer.parseInt(attributes.getValue(0))-1;                 
		}  
                
		if (tag.equalsIgnoreCase("plansys")) {
			j = Integer.parseInt(attributes.getValue(0))-1;                  
                        plansys = true;
		}   
                
		if (tag.equalsIgnoreCase("death")) {
			Simulador.mi = Float.parseFloat(attributes.getValue(0));                        
                        Morte.setMi(Simulador.mi);                    
		}   
                 
		if (tag.equalsIgnoreCase("reproduction")) {
			Simulador.rho = Float.parseFloat(attributes.getValue(0));
                        Reproducao.setRho(Simulador.rho);                   
		}
 
		if (tag.equalsIgnoreCase("mutation")) {
			Simulador.delta = Float.parseFloat(attributes.getValue(0)) ;
                        Mutacao.setDelta(Simulador.delta);                    
		} 
		
	}
 
                @Override
	public void endElement(String uri, String localName,
		String qName) throws SAXException {
	}
 
                @Override
	public void characters(char ch[], int start, int length) throws SAXException { 
		if (plansys) {
			Simulador.Matriz[i][j] = Integer.parseInt(new String(ch, start, length));                 
			plansys = false;
		}
	} 
     }; 
      saxParser.parse("sim/exemplo.xml", handler);      
 
     } catch (Exception e) {
       e.printStackTrace();
     }
    }
}
